/**
    题目:
    将一个按照升序排列的有序数组，转换为一棵高度平衡二叉搜索树。

本题中，一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例:

给定有序数组: [-10,-3,0,5,9],

一个可能的答案是：[0,-3,9,-10,null,5]，它可以表示下面这个高度平衡二叉搜索树：

      0
     / \
   -3   9
   /   /
 -10  5
思路: 递归 二分查找
效果: 
    执行用时：4 ms, 在所有 Go 提交中击败了85.54%的用户
    内存消耗：4.3 MB, 在所有 Go 提交中击败了29.14%的用户
*/
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func sortedArrayToBST(nums []int) *TreeNode {
    return helper(nums,0,len(nums)-1)
}
func helper(nums []int, l, r int)*TreeNode{
    if l > r{
        return nil
    }
    mid := l + (r - l)/2
    root := TreeNode{Val:nums[mid]}
    root.Left = helper(nums,l,mid - 1)
    root.Right = helper(nums,mid + 1, r)
    return &root
}